<?php
/*
 * 参考链接
 * https://www.cnblogs.com/itbsl/p/10286681.html
 * */


// 需要下载的文件 ，根据实际情况，对请求进行校验
$filename = 'abc.mp4';

//获取文件信息
$fileExt = pathinfo($filename);

//获得文件大小
$filesize = filesize($filename);    //(此方法无法获取到远程文件大小)

//设置脚本的最大执行时间，设置为0则无时间限制
set_time_limit(0);
ini_set('max_execution_time', '0');

//通过header()发送头信息
//因为不知道文件是什么类型的，告诉浏览器输出的是字节流
header('content-type:application/octet-stream');

//告诉浏览器返回的文件大小类型是字节
header('Accept-Ranges:bytes');
//告诉浏览器返回的文件大小
header('Accept-Length:'.$filesize);
//告诉浏览器文件作为附件处理并且设定最终下载完成的文件名称
header('content-disposition:attachment;filename='.basename($filename));

//针对大文件，自定义每次读取文件的字节，直接输出数据
$read_buffer = 1024*1024;

$handle = fopen($filename, 'rb');
//总的缓冲的字节数
$sum_buffer = 0;
//只要没到文件尾，就一直读取
while(!feof($handle) && $sum_buffer < $filesize) {
    echo fread($handle,$read_buffer);
    $sum_buffer += $read_buffer;
    // sleep(1);  // 限速操作
}

//关闭句柄
fclose($handle);













